package com.fanco.learn_datastruct_leetcode.juc;/**
 * @author qiaowang 2021/8/19
 */

import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;

/**
 * @author fanco
 * @Desc SemphoreDemo
 * 信号量 可以复用， countdownlatch 和 cyclicBarrierDemo 都是达到某个数量，但是无法对这个数量 增减兼顾。
 * 解决场景：
 * 六辆车  三个停车位
 *
 */
public class SemaphoreDemo {
    public static void main(String[] args) {
        Semaphore semaphore = new Semaphore(3);
        for (int i = 0; i < 6; i++) {
            new Thread(() -> {
               try {
                   // 占用资源，先占一个停车位
                   semaphore.acquire();
                   System.out.println(Thread.currentThread().getName() + "\t抢到车位");
                   try {
                       TimeUnit.SECONDS.sleep(5);
                   } catch (Exception e) {
                       e.printStackTrace();
                   }

                   System.out.println(Thread.currentThread().getName() + "\t离开车位");
               } catch (Exception e) {
                   e.printStackTrace();
               } finally {
                   semaphore.release();
               }
            }, "线程" + i).start();
        }


    }
}
